// 引入请求工具
const { get, post } = require('../../utils/request');
const { uploadFile } = require('../../utils/api');

Page({
  data: {
    userInfo: {},
    hasUserInfo: false,
    genderText: '',
    region: '',
    lastLoginTime: '',
    // 新增字段
    hasGotAvatar: false,
    showNickname: false,
    inputNickname: ''
  },
  
  onLoad: function() {
    this.getUserInfo();
  },
  
  onShow: function() {
    // 每次显示页面时刷新用户信息
    this.getUserInfo();
  },
  
  // 获取用户信息
  getUserInfo: function() {
    // 获取App实例
    const app = getApp();
    
    // 如果已经有用户信息，直接使用
    if (app.globalData.userInfo) {
      this.setUserInfo(app.globalData.userInfo);
      return;
    }
    
    // 判断是否有token
    if (!app.globalData.token) {
      wx.redirectTo({
        url: '/pages/login/login'
      });
      return;
    }
    
    // 请求用户信息
    wx.showLoading({
      title: '加载中...',
    });
    
    get('/api/user/getUserInfo').then(res => {
      wx.hideLoading();
      if (res.code === 200 && res.data) {
        // 保存到全局
        app.globalData.userInfo = res.data;
        // 设置到页面
        this.setUserInfo(res.data);
      } else {
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        });
        
        // token可能失效，跳转登录页
        setTimeout(() => {
          wx.redirectTo({
            url: '/pages/login/login'
          });
        }, 1500);
      }
    }).catch(err => {
      console.error('获取用户信息异常', err);
      wx.hideLoading();
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      });
    });
  },
  
  // 设置用户信息
  setUserInfo: function(userInfo) {
    // 性别转换
    let genderText = '未知';
    if (userInfo.gender === 1) {
      genderText = '男';
    } else if (userInfo.gender === 2) {
      genderText = '女';
    }
    
    // 地区拼接
    let region = '';
    if (userInfo.country) {
      region += userInfo.country;
    }
    if (userInfo.province) {
      region += ' ' + userInfo.province;
    }
    if (userInfo.city) {
      region += ' ' + userInfo.city;
    }
    region = region.trim() || '未设置';
    
    // 最后登录时间格式化
    let lastLoginTime = '未登录';
    if (userInfo.lastLoginTime) {
      lastLoginTime = userInfo.lastLoginTime.replace('T', ' ').substring(0, 19);
    }
    
    this.setData({
      userInfo: userInfo,
      hasUserInfo: true,
      genderText: genderText,
      region: region,
      lastLoginTime: lastLoginTime
    });
  },
  
  // 点击头像区域
  getUserProfile: function() {
    // 如果已经有头像和昵称，则返回
    if (this.data.userInfo.avatarUrl && this.data.userInfo.nickname) {
      return;
    }
    
    // 调用微信的getUserProfile接口，获取用户信息
    wx.getUserProfile({
      desc: '用于完善会员资料',
      success: (res) => {
        console.log('获取用户信息成功:', res);
        
        // 更新用户信息
        this.updateUserInfoToServer(res.userInfo);
      },
      fail: (err) => {
        console.error('获取用户信息失败:', err);
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        });
      }
    });
  },
  
  // 更新用户信息到服务器
  updateUserInfoToServer: function(userInfo) {
    wx.showLoading({
      title: '更新中...',
    });
    
    post('/api/user/updateUserInfo', {
      nickname: userInfo.nickName,
      avatarUrl: userInfo.avatarUrl,
      gender: userInfo.gender,
      country: userInfo.country,
      province: userInfo.province,
      city: userInfo.city
    }).then(res => {
      wx.hideLoading();
      if (res.code === 200) {
        console.log('更新用户信息成功');
        
        // 更新本地用户信息
        const app = getApp();
        const newUserInfo = { ...this.data.userInfo };
        newUserInfo.nickname = userInfo.nickName;
        newUserInfo.avatarUrl = userInfo.avatarUrl;
        newUserInfo.gender = userInfo.gender;
        newUserInfo.country = userInfo.country;
        newUserInfo.province = userInfo.province;
        newUserInfo.city = userInfo.city;
        
        // 保存用户信息到全局
        app.globalData.userInfo = newUserInfo;
        
        // 更新页面显示
        this.setUserInfo(newUserInfo);
        
        wx.showToast({
          title: '更新成功',
          icon: 'success'
        });
      } else {
        console.error('更新用户信息失败:', res);
        wx.showToast({
          title: res.message || '更新失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('更新用户信息异常:', err);
      wx.hideLoading();
      wx.showToast({
        title: '更新失败',
        icon: 'none'
      });
    });
  },
  
  // 选择头像
  onChooseAvatar(e) {
    console.log('选择头像结果:', e.detail);
    const { avatarUrl } = e.detail;
    
    if (!avatarUrl) {
      wx.showToast({
        title: '获取头像失败',
        icon: 'none'
      });
      return;
    }
    
    // 设置已获取头像标志，允许后续设置昵称
    this.setData({
      hasGotAvatar: true
    });
    
    // 显示加载中
    wx.showLoading({
      title: '上传中...',
    });
    
    console.log('使用微信临时头像路径:', avatarUrl);
    
    // 获取微信临时文件路径
    wx.getFileSystemManager().readFile({
      filePath: avatarUrl,
      success: (res) => {
        // 上传到服务器
        wx.uploadFile({
          url: getApp().globalData.baseUrl + '/api/user/uploadAvatar',
          filePath: avatarUrl,
          name: 'file',
          header: {
            'Authorization': getApp().globalData.token || wx.getStorageSync('token') || ''
          },
          success: (uploadRes) => {
            wx.hideLoading();
            let result;
            try {
              result = JSON.parse(uploadRes.data);
              console.log('上传头像结果:', result);
              
              if (result.code === 200 && result.data && result.data.avatarUrl) {
                // 头像上传成功，更新用户信息
                const newUserInfo = { ...this.data.userInfo };
                newUserInfo.avatarUrl = result.data.avatarUrl;
                
                // 保存用户信息到全局
                const app = getApp();
                app.globalData.userInfo = newUserInfo;
                
                // 更新页面显示
                this.setUserInfo(newUserInfo);
                
                wx.showToast({
                  title: '头像更新成功',
                  icon: 'success'
                });
              } else {
                console.error('上传头像失败:', result);
                wx.showToast({
                  title: result.message || '上传头像失败',
                  icon: 'none'
                });
              }
            } catch (e) {
              console.error('解析上传结果失败:', e);
              wx.showToast({
                title: '上传头像失败',
                icon: 'none'
              });
            }
          },
          fail: (err) => {
            wx.hideLoading();
            console.error('上传头像请求失败:', err);
            wx.showToast({
              title: '上传头像失败',
              icon: 'none'
            });
          }
        });
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('读取临时文件失败:', err);
        wx.showToast({
          title: '读取头像失败',
          icon: 'none'
        });
      }
    });
  },
  
  // 显示昵称设置弹窗
  showNicknameDialog() {
    this.setData({
      showNickname: true,
      inputNickname: this.data.userInfo.nickname || ''
    });
  },
  
  // 隐藏昵称设置弹窗
  hideNicknameDialog() {
    this.setData({
      showNickname: false
    });
  },
  
  // 昵称输入事件
  onNicknameInput(e) {
    console.log('昵称输入:', e.detail.value);
    this.setData({
      inputNickname: e.detail.value
    });
  },
  
  // 确认昵称
  confirmNickname() {
    const nickname = this.data.inputNickname;
    if (!nickname.trim()) {
      wx.showToast({
        title: '昵称不能为空',
        icon: 'none'
      });
      return;
    }
    
    // 显示加载中
    wx.showLoading({
      title: '保存中...',
    });
    
    // 更新用户昵称
    post('/api/user/updateUserInfo', {
      nickname: nickname
    }).then(res => {
      wx.hideLoading();
      if (res.code === 200) {
        console.log('更新昵称成功');
        
        // 更新本地数据
        const newUserInfo = { ...this.data.userInfo };
        newUserInfo.nickname = nickname;
        
        // 保存用户信息到全局
        const app = getApp();
        app.globalData.userInfo = newUserInfo;
        
        // 更新页面显示
        this.setUserInfo(newUserInfo);
        
        // 隐藏弹窗
        this.hideNicknameDialog();
        
        wx.showToast({
          title: '昵称设置成功',
          icon: 'success'
        });
      } else {
        console.error('更新昵称失败:', res);
        wx.showToast({
          title: res.message || '更新昵称失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('更新昵称异常:', err);
      wx.hideLoading();
      wx.showToast({
        title: '更新昵称失败',
        icon: 'none'
      });
    });
  },
  
  // 更新用户头像 - 由于改为直接上传，此方法暂不使用
  updateUserAvatar(avatarUrl) {
    console.log('准备更新用户头像:', avatarUrl);
    
    post('/api/user/updateUserInfo', {
      avatarUrl: avatarUrl
    }).then(res => {
      wx.hideLoading();
      console.log('更新用户头像返回结果:', res);
      
      if (res.code === 200) {
        console.log('更新头像成功');
        
        // 更新本地数据
        const newUserInfo = { ...this.data.userInfo };
        newUserInfo.avatarUrl = avatarUrl;
        
        // 保存用户信息到全局
        const app = getApp();
        app.globalData.userInfo = newUserInfo;
        
        // 更新页面显示
        this.setUserInfo(newUserInfo);
        
        // 显示昵称设置弹窗，已通过hasGotAvatar标记激活昵称按钮
        wx.showToast({
          title: '头像更新成功，请点击设置昵称',
          icon: 'none',
          duration: 2000
        });
      } else {
        console.error('更新头像失败:', res);
        wx.showToast({
          title: res.message || '更新头像失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('更新头像异常:', err);
      wx.hideLoading();
      wx.showToast({
        title: '更新头像失败',
        icon: 'none'
      });
    });
  },
  
  // 退出登录
  logout: function() {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除token和用户信息
          const app = getApp();
          app.globalData.token = '';
          app.globalData.userInfo = null;
          wx.removeStorageSync('token');
          
          // 跳转到登录页
          wx.redirectTo({
            url: '/pages/login/login'
          });
        }
      }
    });
  },
  
  // 绑定手机号
  bindPhone: function() {
    wx.showToast({
      title: '此功能暂未实现',
      icon: 'none'
    });
  },
  
  // 导航到我的订单
  navigateToOrders: function() {
    wx.showToast({
      title: '订单功能暂未实现',
      icon: 'none'
    });
  },
  
  // 导航到收货地址
  navigateToAddress: function() {
    wx.showToast({
      title: '地址功能暂未实现',
      icon: 'none'
    });
  },
  
  // 导航到优惠券
  navigateToCoupon: function() {
    wx.showToast({
      title: '优惠券功能暂未实现',
      icon: 'none'
    });
  },
  
  // 导航到收藏
  navigateToFavorite: function() {
    wx.showToast({
      title: '收藏功能暂未实现',
      icon: 'none'
    });
  }
}) 